package com.itheima;

import java.util.ArrayList;
import java.util.LinkedList;


/*      1.LinkedList的特点
        底层数据结构是双链表，查询慢，首尾操作的速度是极快的，所以多了很多首尾操作的特有API。

        2.LinkedList集合的特有功能
        addFirst(E e)	在该列表开头插入指定的元素
        addLast(E e)	将指定的元素追加到此列表的末尾
        getFirst()	返回此列表中的第一个元素
        getLast()	返回此列表中的最后一个元素
        removeFirst()	从此列表中删除并返回第一个元素
        removeLast()	从此列表中删除并返回最后一个元素
        */

public class LinkedDemo {
    public static void main(String[] args){
        LinkedList<String> list = new LinkedList<>();
        //1.addFirst(E e) 增，在列表开头增加元素
        //  addLast(E e) 增，在列表尾部增加元素
        list.addFirst("张三");
        list.addLast("李四");
        list.addLast("三张");
        list.addLast("四里");
        list.addLast("王五");

        //2.get(index) 查找此列表中指定位置的元素

        String s = list.get(0); //O(n) 查询效率慢
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("张三");
        arrayList.get(0); //O(1) 查询效率极快

        //3.getFirst()	查，列表中的第一个元素
        //  getLast()	查，列表中的最后一个元素

        String first = list.getFirst();
        System.out.println(first);
        String last = list.getLast();
        System.out.println(last);

        //4.removeFirst()	删，从此列表中删除并返回第一个元素
        //  removeLast()	删，从此列表中删除并返回最后一个元素

        String removeFirst = list.removeFirst();
        System.out.println(removeFirst);
        String removeLast = list.removeLast();
        System.out.println(removeLast);

        System.out.println(list);
    }
}
